package code.tools.commponents
{
	import flash.display.JointStyle;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
	
	/**
	 *warn:文本框的宽不进行自动调整，保持不变
	 *@author wenqiang.deng
	 *Create time:2013-8-15 下午2:42:39
	 */
	public class AutoTextField extends TextField
	{
		/**
		 //		 * 不进行自适应处理 
		 //		 */		
		//		public static const AUTO_NONE:String = 'autoNone';
		//		/**
		//		 * 根据文本自动调整文本框尺寸 
		//		 */		
		//		public static const AUTO_SIZE:String = 'autoSize';
		//		/**
		//		 * 当文本长度超过指定宽/高时，缩小字体大小
		//		 */		
		//		public static const AUTO_ZOOM:String = 'autoZoom';
		//		private var _autoType:String;
		private var _zoomW:Number;
		private var _zoomH:Number;
		private var _y:Number;
		private var _offsetY:Number;
		private var _format:TextFormat;
		private var _defaultTextSize:int;
		private var _isOffsetAtZoom:Boolean;
		private var _isZoom:Boolean;
		private var _onZoom:Function;
		
		public function AutoTextField()
		{	
			super();
			_zoomW = 100;
			_zoomH = 60;
			_y = 0;
			_offsetY = 0;
			_isOffsetAtZoom = true;
			_defaultTextSize = int(defaultTextFormat.size);
			_format = new TextFormat();
		}
		
		//		/**
		//		 * 设置自适应的类型 
		//		 * @param autoType
		//		 * 
		//		 */		
		//		public function setAutoType(autoType:String = AUTO_SIZE):void
		//		{
		//			_autoType = autoType;
		//			if(_autoType == AUTO_SIZE)
		//			{
		//				super.wordWrap = true;
		//				if(defaultTextFormat.align == TextFormatAlign.CENTER)
		//					super.autoSize = TextFieldAutoSize.CENTER;
		//				else if(defaultTextFormat.align == TextFormatAlign.LEFT)
		//					super.autoSize = TextFieldAutoSize.LEFT; 
		//				else if(defaultTextFormat.align == TextFormatAlign.RIGHT)
		//					super.autoSize = TextFieldAutoSize.RIGHT; 
		//			}
		//			else if(_autoType == AUTO_ZOOM)
		//			{
		//				super.wordWrap = true;
		//				super.autoSize = TextFieldAutoSize.NONE;
		//			}
		//		}
		
		/**
		 * 应用默认的autoSize方式 （根据formatAlign设置autoSize,自动换行） 
		 * 
		 */		
		public function applyDefaultAutoSize():void
		{
			super.wordWrap = true;
			if(defaultTextFormat.align == TextFormatAlign.CENTER)
				super.autoSize = TextFieldAutoSize.CENTER;
			else if(defaultTextFormat.align == TextFormatAlign.LEFT)
				super.autoSize = TextFieldAutoSize.LEFT; 
			else if(defaultTextFormat.align == TextFormatAlign.RIGHT)
				super.autoSize = TextFieldAutoSize.RIGHT; 
		}
		
		public function openZoom(w:Number,h:Number):void
		{
			_isZoom = true;
			_zoomW = w;
			_zoomH = h;
		}
		
		public function closeZoom():void
		{
			_isZoom = false;
		}
		//		
		//		public function setIsZoom(bool:Boolean):void
		//		{
		//			_isZoom = bool;
		//		}
		//		
		public function setZoomW(w:Number):void
		{
			_zoomW = w;
		}
		
		public function setZoomH(h:Number):void
		{
			_zoomH = h;
		}
		
		/**
		 * 在zoom状态时，是否自动进行偏移处理 
		 * @param bool
		 * 
		 */		
		public function setOffsetAtZoom(bool:Boolean):void
		{
			_isOffsetAtZoom = bool;
		}
		
		/**
		 * 在字体缩放时回调 
		 * 
		 */		
		internal function setOnZoom(func:Function):void
		{
			_onZoom = func;
		}
		
		/**
		 * 应用字体大小 
		 * @param size
		 * 
		 */		
		internal function synchroSize(size:int):void
		{
			if(_format.size == size)return;
			applyTextSize(size);
		}
		
		internal function get defaultTextSize():int
		{
			return _defaultTextSize;
		}
		
		
		override public function set defaultTextFormat(format:TextFormat):void
		{
			super.defaultTextFormat = format;
			_defaultTextSize = int(format.size);
		}
		
		//		override public function set wordWrap(bool:Boolean):void
		//		{
		//			if(_autoType == AUTO_NONE)
		//				super.wordWrap = bool;
		//			//			else
		//			//				trace('警告：当设置了自适应时 wordWrap不允许修改\n');
		//		}
		//		
		//		override public function set autoSize(str:String):void
		//		{
		//			if(_autoType == AUTO_NONE)
		//				super.autoSize = str;
		//			//			else
		//			//				trace('警告：当设置了自适应时 autoSize不允许修改\n');
		//		}
		//		
		//		override public function set multiline(bool:Boolean):void
		//		{
		//			if(_autoType == AUTO_NONE)
		//				super.multiline = bool;
		//			//			else
		//			//				trace('警告：当设置了自适应时 autoSize不允许修改\n');
		//		}
		
		override public function set y(value:Number):void
		{
			_y = value;
			super.y = y + _offsetY;
		}
		
		override public function get y():Number
		{
			return _y;
		}
		
		//		override public function set width(value:Number):void
		//		{
		//			super.width = value;
		//			_width = value;
		//		}
		//		
		//		override public function set height(value:Number):void
		//		{
		//			super.height = value;
		//			_height = value;
		//		}
		
		override public function set text(str:String):void
		{
			if(str == null)
			{
				trace('文本不能为null\n',new Error().getStackTrace());
				str = 'E_R_R_O_R';
			}
			super.text = str;
			if(_isZoom)zooming();
		}
		
		override public function set htmlText(str:String):void
		{
			if(str == null)
			{
				trace('文本不能为null\n',new Error().getStackTrace());
				str = 'E_R_R_O_R';
			}
			super.htmlText = str;
			if(_isZoom)zooming();
		}
		
		private function zooming():void
		{
			if(_isZoom)
			{
				applyTextSize(_defaultTextSize);
				while(((this.textHeight + 4 ) > _zoomH || (this.textWidth + 4) > _zoomW ) && _format.size > 1)
				{
					applyTextSize(int(_format.size) - 1);
				}
				_onZoom && _onZoom(this,_format.size);
			}
		}
		
		/**
		 * 应用新的字体大小 
		 * @param value
		 * 
		 */		
		private function applyTextSize(value:int):void
		{
			_format.size = value;
			super.setTextFormat(_format);
			//
			if(_isOffsetAtZoom)
			{
				_offsetY = (_defaultTextSize - int(_format.size))/2;//TODO dwq 临时计算方式
				super.y = _y + _offsetY;
			}
		}
	}
}